package leetcode.editor.cn;

//求解一个给定的方程，将x以字符串"x=#value"的形式返回。该方程仅包含'+'，' - '操作，变量 x 和其对应系数。 
//
// 如果方程没有解，请返回“No solution”。 
//
// 如果方程有无限解，则返回“Infinite solutions”。 
//
// 如果方程中只有一个解，要保证返回值 x 是一个整数。 
//
// 示例 1： 
//
// 输入: "x+5-3+x=6+x-2"
//输出: "x=2"
// 
//
// 示例 2: 
//
// 输入: "x=x"
//输出: "Infinite solutions"
// 
//
// 示例 3: 
//
// 输入: "2x=x"
//输出: "x=0"
// 
//
// 示例 4: 
//
// 输入: "2x+3x-6x=x+2"
//输出: "x=-1"
// 
//
// 示例 5: 
//
// 输入: "x=x+2"
//输出: "No solution"
// 
// Related Topics 数学 字符串 模拟 👍 80 👎 0

//Java：求解方程
public class SolveTheEquation_640 {
    public static void main(String[] args) {
        Solution solution = new SolveTheEquation_640().new Solution();
        // TO TEST
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String solveEquation(String equation) {
            equation = equation.replace("-", "+-");
            if (equation.charAt(0) == '+') equation = equation.substring(1);
            String[] LR = equation.split("[=]");
            String[] left = LR[0].split("[+]");
            String[] right = LR[1].split("[+]");
            int a = 0, b = 0;
            for (String item : left) {
                if (item.indexOf('x') == -1) {
                    b -= Integer.parseInt(item);
                } else {
                    String x = item.substring(0, item.indexOf('x'));
                    if (x.equals("")) x = "1";
                    if (x.equals("-")) x = "-1";
                    a += Integer.parseInt(x);
                }
            }
            for (String item : right) {
                if(item.equals("")) continue;
                if (item.indexOf('x') == -1) {
                    b += Integer.parseInt(item);
                } else {
                    String x = item.substring(0, item.indexOf('x'));
                    if (x.equals("")) x = "1";
                    if (x.equals("-")) x = "-1";
                    a -= Integer.parseInt(x);
                }
            }
            StringBuffer res = new StringBuffer();
            if (a == 0 && b == 0) {
                res.append("Infinite solutions");
            } else if (a == 0) {
                res.append("No solution");
            } else {
                res.append("x=").append(b / a);
            }
            return res.toString();
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
